#include <stdio.h>      // 引入标准输入输出库，用于使用 printf、scanf 等函数
#include <stdlib.h>     // 引入标准库函数，如 exit()、system() 等
#include "attendance.h" // 引入自己写的头文件，其中声明了所有函数和结构体

int main() {            // 主函数，程序从这里开始执行
    int choice;         // 用来存储用户输入的菜单选项（例如1、2、3……）

    while (1) {         // 无限循环，让菜单反复出现，直到用户选择退出（0）
        setColor(11);   // 调用自定义函数设置文字颜色为浅蓝色（11号颜色）
        printf("\n========= 学生考勤系统 =========\n");  // 打印系统标题
        setColor(7);    // 设置文字颜色为白色（7号颜色，恢复默认）

        // 打印菜单选项
        printf("1. 添加学生\n");           // 添加学生信息
        printf("2. 删除学生\n");           // 删除某个学生
        printf("3. 显示学生列表\n");       // 显示所有学生信息
        printf("4. 开始考勤\n");           // 记录某节课的考勤
        printf("5. 查看某节课考勤\n");     // 查看某一节课的考勤情况
        printf("6. 查看某个学生考勤\n");   // 查看单个学生的出勤情况
        printf("7. 统计某节课出勤率\n");   // 统计一节课的出勤率（出勤人数/总人数）
        printf("8. 统计某学生缺勤次数\n"); // 统计单个学生缺勤次数
        printf("0. 退出系统\n");           // 退出程序
        printf("请输入选项：");             // 提示用户输入菜单编号

        scanf("%d", &choice);              // 从键盘读取一个整数，存入变量 choice

        if (choice == 0) break;            // 如果输入0，则跳出循环，结束程序

        char id[20];   // 用于存放学号输入
        int lesson;    // 用于存放课次编号（第几节课）

        // 根据用户输入的菜单编号执行对应功能
        switch(choice) {
            case 1:     // 选项1：添加学生
                addStudent();               // 调用添加学生的函数
                break;

            case 2:     // 选项2：删除学生
                printf("输入学号: ");       // 提示输入要删除的学号
                scanf("%s", id);            // 读取学号字符串
                deleteStudent(id);          // 调用删除学生函数
                break;

            case 3:     // 选项3：显示学生列表
                showStudents();             // 调用显示学生列表的函数
                break;

            case 4:     // 选项4：开始考勤
                printf("输入课次: ");       // 提示输入第几节课
                scanf("%d", &lesson);       // 读取课次编号
                startAttendance(lesson);    // 调用开始考勤函数
                break;

            case 5:     // 选项5：查看某节课考勤
                printf("输入课次: ");       // 提示输入课次
                scanf("%d", &lesson);
                showLessonAttendance(lesson); // 调用查看该节课考勤函数
                break;

            case 6:     // 选项6：查看某个学生的考勤记录
                printf("输入学号: ");       // 提示输入学生学号
                scanf("%s", id);
                showStudentAttendance(id);  // 调用查看学生考勤函数
                break;

            case 7:     // 选项7：统计某节课的出勤率
                printf("输入课次: ");       // 提示输入课次
                scanf("%d", &lesson);
                countLessonRate(lesson);    // 调用统计出勤率函数
                break;

            case 8:     // 选项8：统计某学生缺勤次数
                printf("输入学号: ");       // 提示输入学生学号
                scanf("%s", id);
                countStudentAbsence(id);    // 调用统计缺勤次数函数
                break;

            default:    // 如果输入了菜单中没有的数字
                printf("无效输入！\n");    // 提示用户输入不合法
        }
    }

    // 当用户输入 0 退出时执行以下部分
    setColor(10);      // 设置文字颜色为绿色（10号颜色）
    printf(" 感谢使用，再见！\n");   // 打印退出提示语
    setColor(7);       // 恢复为默认文字颜色（白色）
    return 0;          // 正常退出程序
}
